﻿using System;
using System.ServiceModel;
using System.Security.Permissions;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions.FaultContracts;

namespace Sinacor.Servico.Bovespa.Cliente.Service.ServiceContract
{
    /// <summary>
    /// ServiceContract Interface - IDicionarioErroExportacaoComitente
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.Cliente.Service.ServiceContract", SessionMode = SessionMode.Allowed)]
    public interface IDicionarioErroExportacaoComitente
    {
        /// <summary>
        /// Altera a descrição de um erro de exportação de comitente.
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarErroExportacaoComitente")]
        void AlterarErroExportacaoComitente(DataContract.Request.ErroExportacaoComitenteRequest request);

        /// <summary>
        /// Altera a descrição de diversos erros de exportação de comitente.
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "AlterarErrosExportacoesComitentes")]
        [TransactionRequired]
        void AlterarErrosExportacoesComitentes(List<DataContract.Request.ErroExportacaoComitenteRequest> request);

        /// <summary>
        /// Realiza a pesquisa no dicionário de erros de exportação de comitente, conforme dados informados no filtro.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ConsultarErrosExportacoesComitentes")]
        List<DataContract.Response.ErroExportacaoComitenteResponse> ConsultarErrosExportacoesComitentes(DataContract.Request.FiltroErroExportacaoComitenteRequest request);

        /// <summary>
        /// Exclui um erro de exportação de comitente.
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirErroExportacaoComitente")]
        void ExcluirErroExportacaoComitente(DataContract.Request.FiltroErroExportacaoComitenteChaveRequest request);

        /// <summary>
        /// Exclui diversos erros de exportação de comitente.
        /// </summary>
        /// <param name="requestList"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExcluirErrosExportacoesComitentes")]
        [TransactionRequired]
        void ExcluirErrosExportacoesComitentes(List<DataContract.Request.FiltroErroExportacaoComitenteChaveRequest> requestList);

        /// <summary>
        /// Inclui diversos erros de exportação de comitente.
        /// Exclui diversos erros de exportação de comitente.
        /// Altera a descrição de diversos erros de exportação de comitente.
        /// </summary>
        /// <param name="listaExclusao"></param>
        /// <param name="listaInclusao"></param>
        /// <param name="listaAlteracao"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ExecutarTransacoes")]
        [TransactionRequired]
        void ExecutarTransacoes(List<DataContract.Request.FiltroErroExportacaoComitenteChaveRequest> listaExclusao, List<DataContract.Request.ErroExportacaoComitenteRequest> listaInclusao, List<DataContract.Request.ErroExportacaoComitenteRequest> listaAlteracao);

        /// <summary>
        /// Inclui um erro de exportação de comitente.
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirErroExportacaoComitente")]
        void IncluirErroExportacaoComitente(DataContract.Request.ErroExportacaoComitenteRequest request);

        /// <summary>
        /// Inclui diversos erros de exportação de comitente.
        /// </summary>
        /// <param name="requestList"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "IncluirErrosExportacoesComitentes")]
        [TransactionRequired]
        void IncluirErrosExportacoesComitentes(List<DataContract.Request.ErroExportacaoComitenteRequest> requestList);

        /// <summary>
        /// Obtém um determinado erro de exportação de comitente
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, AsyncPattern = false, Action = "ObterErroExportacaoComitente")]
        DataContract.Response.ErroExportacaoComitenteResponse ObterErroExportacaoComitente(DataContract.Request.FiltroErroExportacaoComitenteChaveRequest request);
    }
}
